<?php


class WSB_Db_Rowset extends Zend_Db_Table_Rowset_Abstract
{

	/**
	 * Gib das Row-Objekt mit PK gleich $primary zurueck.
	 *
	 * @param integer $primary
	 * @return WSB_Db_Row
	 */
	public function getRow($primary)
	{
		if(is_array($primary)) {
			throw new Exception('Zusammengesetzte Schluessel werden noch nicht unterstuetzt.');
		}
		if(is_numeric($primary)) {
			$pk = $this->getTable()->getPrimary();
			foreach($this AS $item) {
				if(isset($item->$pk) && ($item->$pk == $primary)) {
					return $item;
				}
			}
		}
		return null;
	}

	/**
	 * Entferne alle als geloescht markierten Row-Objekte aus
	 * dem aktuellen Rowset-Objekt.
	 *
	 */
	public function unsetDeletedRows()
	{
		foreach($this->_data AS $key=>$data) {
			if(isset($data['deleted']) && (intval($data['deleted']) == 1)) {
				unset($this->_data[$key]);
			}
		}
		$this->_count = count($this->_data);
	}

	/**
	 * Entferne alle als versteckt markierten Row-Objekte aus
	 * dem aktuellen Rowset-Objekt.
	 *
	 */
	public function unsetHiddenRows()
	{
		foreach($this->_data AS $key=>$data) {
			if(isset($data['hidden']) && (intval($data['hidden']) == 1)) {
				unset($this->_data[$key]);
			}
		}
		$this->_count = count($this->_data);
	}

	/**
	 * Gib XML 1.0 fuer das aktuelle Rowset-Objekt zurueck.
	 *
	 * @return string
	 */
	public function toXml()
	{
		$xml = '<?xml version="1.0" encoding="utf-8"?>';
		$xml .= "\n";
		$xml .= '<rowset>';
		$xml .= '<total>' . count($this) . '</total>';
		foreach($this->_data AS $data) {
			$xml .= '<row>';
			foreach($data AS $key=>$value) {
				$xml .= "<$key>$value</$key>";
			}
			$xml .= '</row>';
		}
		$xml .=  '</rowset>';
		return $xml;
	}

}
